package grupobbva.pe.operhc.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRProperties;

import org.apache.log4j.Logger;

public class ExportadorGeneric {
	private static Logger log = Logger.getLogger(ExportadorGeneric.class);
	
	
	public ExportadorGeneric(){}
	
	/*@creaPDF
	 * rutaJasper - es la ruta completa que apunta al .jasper
	 * rutaPDF - es la ruta completa donde se depositara el pdf. ejemplo C:\\reports\\plantillas\\archivo2.pdf
	 * parametros - son parametros que se puedan requerir dado el reporte
	 * lista - es la lista que se iterara en el reporte
	 * */
	public ExportadorGeneric(String rutaJasper, String rutaDepositaXLM, Map<String, Object> parametros, List<?> lista) throws Exception{
		
		JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(lista);
		JasperPrint jasperPrint=null;
		OutputStream outputfile= null;

		try {
			
			jasperPrint= JasperFillManager.fillReport(rutaJasper,parametros, dataSource);
			 //ByteArrayOutputStream output = new ByteArrayOutputStream();
			 outputfile= new FileOutputStream(new File(rutaDepositaXLM));
			
			JRXlsExporter jrPdfExporter =new JRXlsExporter();
			jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,rutaDepositaXLM);
			
			
			jrPdfExporter.exportReport();
			
//			JRXlsExporter
			outputfile.close();

		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception(e);
		}finally {
			try  {
			if(outputfile != null)
				{
				outputfile.close();
				outputfile = null;
				}
			}catch (Exception e) {
				log.error(e.getMessage());
			}
		}
 
	}
	
	
	
	
	public byte[] expExcel(String rutaJasper, String rutaDepositaXLM, Map<String, Object> parametros, List<?> lista) throws Exception{
		
		JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", Boolean.TRUE);		
		JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(lista);
		JasperPrint jasperPrint=null;
		try {
			
			jasperPrint = JasperFillManager.fillReport(rutaJasper,parametros, dataSource);
			ByteArrayOutputStream output = new ByteArrayOutputStream();			 
			
			JRXlsExporter exporterXLS = new JRXlsExporter();
			exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT,jasperPrint);
			exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,output);
			exporterXLS.setParameter(JRXlsExporterParameter.IGNORE_PAGE_MARGINS, Boolean.TRUE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
			
			exporterXLS.exportReport();
			return output.toByteArray();

		} catch (Exception e) {
			throw new Exception(e);
		}
 
	}

}
